package experiment.e08.code;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


/**
 * @author thinkpad - 83start
 * @version v1.0
 * @create 2022/11/17 15:44
 * @package experiment.e08.code
 * @description 编写一个应用程序，有一个Frame窗口，窗口的中心添加了一个文本区。
 * 该窗口中有有4个菜单。每个菜单里都有菜单项，每个菜单项都对应有快捷键，
 * 选择某个菜单项时窗口中心的文本区显示某些信息。
 */

public class Ch05 {


    public static void main(String[] args) {
        JFrame jFrame = new JFrame("应用程序");
        jFrame.setLayout(new BorderLayout());
        jFrame.setBounds(300, 500, 500, 200);

        JLabel jLabel = new JLabel();

        JMenuBar menuBar = new JMenuBar();
        // 创建一级标题
        JMenu fileMenu = new JMenu("文件");
        JMenu editMenu = new JMenu("编辑");
        JMenu helpMenu = new JMenu("帮助");
        JMenu showMenu = new JMenu("视图");

        // 创建二级标题
        JMenuItem newItem = new JMenuItem("新建");
        newItem.setActionCommand("New");
        JMenuItem openItem = new JMenuItem("打开");
        openItem.setActionCommand("Open");
        JMenuItem saveItem = new JMenuItem("保存");
        saveItem.setActionCommand("Save");
        JMenuItem exitItem = new JMenuItem("退出");
        exitItem.setActionCommand("Exit");
        JMenuItem cutItem = new JMenuItem("剪切");
        cutItem.setActionCommand("Cut");
        JMenuItem copyItem = new JMenuItem("复制");
        copyItem.setActionCommand("Copy");
        JMenuItem pasteItem = new JMenuItem("粘贴");
        pasteItem.setActionCommand("Paste");
        JMenuItem aboutItem = new JMenuItem("关于");
        aboutItem.setActionCommand("About");

        JMenuItem toolItem = new JMenuItem("工具");
        toolItem.setActionCommand("Tools");
        JMenuItem showItem = new JMenuItem("显示");
        showItem.setActionCommand("Shows");

        // 以下把每个菜单项添加到对应的菜单上
        fileMenu.add(newItem);
        fileMenu.add(openItem);
        fileMenu.add(saveItem);
        fileMenu.addSeparator();
        fileMenu.add(exitItem);
        editMenu.add(copyItem);
        editMenu.add(pasteItem);
        helpMenu.add(aboutItem);
        showMenu.add(toolItem);
        showMenu.add(showItem);

        // 以下把每个菜单都添加到菜单栏上
        menuBar.add(fileMenu);
        menuBar.add(editMenu);
        menuBar.add(helpMenu);
        menuBar.add(showMenu);

        jFrame.setJMenuBar(menuBar);
        setMenuAction(menuBar, jLabel);
        jFrame.add(jLabel);
        jFrame.setVisible(true);
    }

    private static void setMenuAction(JMenuBar bar, JLabel label) {
        for (int i = 0; i < bar.getMenuCount(); i++) { // 遍历菜单栏下的所有菜单
            JMenu menu = bar.getMenu(i); // 获取指定位置的菜单
            menu.setPreferredSize(new Dimension(60, 30)); // 设置菜单按钮的推荐宽高
            for (int j = 0; j < menu.getItemCount(); j++) { // 遍历菜单下的所有菜单项
                JMenuItem item = menu.getItem(j); // 获取指定位置的菜单项
                if (item != null) { // 菜单项非空。这个判断是为了避开菜单项之间的分隔线
                    item.setPreferredSize(new Dimension(120, 28)); // 设置菜单项的推荐宽高
                    item.addActionListener(new ActionListener() { // 给菜单项注册单击监听器
                        @Override
                        public void actionPerformed(ActionEvent e) { // 发生了单击事件
                            // 调用getActionCommand方法获取单击事件的动作命令，并展示在标签上
                            label.setText("您点击了菜单项：" + e.getActionCommand());
                        }
                    });
                }
            }
        }
    }
}
